<?php
// tabele Komentarzy
define('SKCATEGO','sklep_category');
define('SKCATELA','sklep_category_lang');
define('SKPRODUK','sklep_produkty');
define('SKPRODLA','sklep_produkty_lang');	
define('SKSETTIN','sklep_settings');
define('SKSPRZED','sklep_sprzedaz');
define('SKSPRZSZ','sklep_sprzedaz_szczegoly');	

require_once 'SklepModel.php';
/**
 * 21wSklep
 * 
 * @author kowal.sylwester
 *
 */
class SklepController extends SklepModel {
	protected $userID; // numer uzytkownika
	protected $folder; // folder publiczny
	protected $db; // połaczenie z bazą sklep
	protected $akcja; // zadanie do wykoania przez clasę sklep
	protected $vars; // przekazane zmienne z adresu url
	protected $ustawienia; // dane z tabeli settings
	protected $skcID; // indeks kategorii
	protected $skpID; // numer produktu
	protected $sksID; // numer FV (tranzakcji)
	protected $subkategorie;
	protected $waluta;
	
	/**
	 * Konstruktor klasy SklepController
	 * 
	 * definiujemy folder publiczny
	 * instalujemy bazę
	 * 
	 * @param $opc - parametry przekazane z constans.php
	 */
	function __construct($opc=null){
		global $parameters,$config,$objSession,$dispatcher;
		$this->folder  = "../public/users/".str_replace('www.','',$_SERVER['HTTP_HOST'])."/Sklep/";
		tools::_add_folder($this->folder);
		// sciezka do bazy
		tools::_add_folder($parameters['sklep']['host']);
		$baza = str_replace('www.','',$_SERVER['HTTP_HOST']).".db";
		// instalacja bazy
		$this->db = SklepController::installDB();
		// akcja domyślna
		$this->akcja = null;
		// ustawienia
		$this->ustawienia = $this->pobiezUstawienia();
		tools::_assign("settings_sklep",$this->ustawienia);
		
		// waluta 
		$this->waluta = "PLN";
		
		// poinformuj koszyk z jakim systemem współpracuje
		$dispatcher->Koszyk->system = "Sklep";
		
		// zmienne z url dla metod wykonywanych z url
		$this->vars = (is_string($config->parameters)) ? explode(',',$config->parameters) : array();	
	}
	
	/**
	 * okreslenie akcji do wykonania i zapisanie parametrów wykoanaia
	 * @param $akcja_
	 * @return unknown_type
	 */
	public function indexAction($akcja_=null){
		global $config;
		if(is_null($this->akcja) && !is_null($akcja_)) { 
			$this->akcja = $akcja_;
			return;			
		}else {
			$this->vars = (is_string($config->parameters)) ? explode(',',$config->parameters) : array();
			
			if(is_null($this->akcja)) $this->akcja = $this->vars[1];
			
			$this->wykoanjZadanie();
		}		
	}
	
	/**
	 * główna metoda rozdzielająca zadania
	 * @return unknown_type
	 */
	private function wykoanjZadanie(){
		global $config, $objSession,$dispatcher;
	
		tools::_display("Sklep/css.tpl");
		
		
		switch($this->akcja){
			case 'ust_sklepu':
				if ( !$objSession->IsLoggedIn() && $objSession->GetUserData("stanowisko") != 'a') { tools::_redirect('zaloguj_sie.html'); return;}
				$this->toolbar("toolbar__ustawienia_start");
				$this->stronaGlownaUstawien();
				break;
				
			case 'ust_lista_kategorii_sklepu':
				if ( !$objSession->IsLoggedIn() && $objSession->GetUserData("stanowisko") != 'a') { tools::_redirect('zaloguj_sie.html'); return;}
				$this->toolbar("toolbar__ustawienia_categ");
				$this->ustawieniaListaKategoriiSklepu();
				break;
				
			case 'ust_zarzadanie_danymi_sklepu':
				if ( !$objSession->IsLoggedIn() && $objSession->GetUserData("stanowisko") != 'a') { tools::_redirect('zaloguj_sie.html'); return;}
				$this->toolbar("toolbar__ustawienia_start");
				$this->ustawieniaZarzadzanieDanymiSklepu();
				break;
				
			case 'ust_nowa_kategoria_sklepu':
				if ( !$objSession->IsLoggedIn() && $objSession->GetUserData("stanowisko") != 'a') { tools::_redirect('zaloguj_sie.html'); return;}
				SklepController::toolbar($toolbar__ustawienia_categ);
				tools::_display("Sklep/dodaj_kategorie.tpl");
				break;
				
			case 'ust_edytuj_kategorie_sklepu':
				if ( !$objSession->IsLoggedIn() && $objSession->GetUserData("stanowisko") != 'a') { tools::_redirect('zaloguj_sie.html'); return;}
				if (!is_null($this->vars) && array_key_exists(2,$this->vars)) $this->skcID = $this->vars[2];
				$this->toolbar("toolbar__ustawienia_categ");
				$this->edytujKategorieSklepu();
				break;
			
			case 'ust_nowa_podkategoria_sklepu':
				if ( !$objSession->IsLoggedIn() && $objSession->GetUserData("stanowisko") != 'a') { tools::_redirect('zaloguj_sie.html'); return;}
				if (!is_null($this->vars) && array_key_exists(2,$this->vars)) $this->skcID = $this->vars[2];
				tools::_assign("skcpID",$this->vars[2]);
				$this->toolbar("toolbar__ustawienia_categ");
				tools::_display("Sklep/dodaj_kategorie.tpl");
				break;
				
			case 'wyswietl_produkty_dla_kategorii':
				if (!is_null($this->vars) && array_key_exists(2,$this->vars)) $this->skcID = $this->vars[2];
				$this->toolbar("toolbar__ustawienia_categ");
				$this->pokazProduktyPromocyjne($this->skcID);
				$this->wyswietlProduktyDlaKategorii();				
				break;
			case 'ust_usun_kategorie_sklepu':

				break;
			// PRODUKTY
			case 'wyswietl_informacje_o_produkcie':
				if (!is_null($this->vars) && array_key_exists(2,$this->vars)) $this->skpID = $this->vars[2];
				$kateg = $this->pobiezJednaKategorieDla_skpID($this->skpID);
				tools::_assign("kateg",$kateg);
				$this->skcID = (array_key_exists('skcID',$kateg[0]) ) ? $kateg[0]['skcID'] : null;				
				
				$this->toolbar("toolbar__produkt_main");
				$this->wyswietlProduktSklepu();
				break;
			
			case 'edytuj_tresc_produktu':
				if ( !$objSession->IsLoggedIn() && $objSession->GetUserData("stanowisko") != 'a') { tools::_redirect('zaloguj_sie.html'); return;}
				if (!is_null($this->vars) && array_key_exists(2,$this->vars)) $this->skpID = $this->vars[2];
				$kateg = $this->pobiezJednaKategorieDla_skpID($this->skpID);
				tools::_assign("kateg",$kateg);
				$this->skcID = (array_key_exists('skcID',$kateg[0]) ) ? $kateg[0]['skcID'] : null;				
				$this->toolbar("toolbar__produkt_main");
				$this->edytujProduktSklepu();
				break;
				
			case 'nowy_produkt_sklepu':
				if ( !$objSession->IsLoggedIn() && $objSession->GetUserData("stanowisko") != 'a') { tools::_redirect('zaloguj_sie.html'); return;}
				$this->skcID = $this->vars[2];
				$this->toolbar("toolbar__ustawienia_categ");
				tools::_assign("kateg",$this->pobiezDaneKategoriizBazy($this->skcID,$config->__lang));
				tools::_assign("skcID",$this->skcID );
				tools::_display("Sklep/dodaj_produkt.tpl");
				break;	
				
				
			// KOSZYK
			// opcja wymagana by zawartosc koszyka wyswietlała się na stronie głównej sklepu
			case 'wyswietl_zawartosc_koszyka':
				$dispatcher->Koszyk->akcja = 'wyswietl_zawartosc_koszyka';
				$dispatcher->Koszyk->indexAction();
				break;
				
			case 'okresl_sposob_zaplaty':
				
				$dispatcher->Koszyk->akcja = 'okresl_sposob_zaplaty';
				$dispatcher->Koszyk->DotPayID = $this->ustawienia['numer_id_dotpay'];
				$dispatcher->Koszyk->indexAction();
				break;
				
			// KONFIGURACJA
			case 'ust_konfiguracja_sklepu':
				if ( !$objSession->IsLoggedIn() && $objSession->GetUserData("stanowisko") != 'a') { tools::_redirect('zaloguj_sie.html'); return;}
				
				$this->toolbar("toolbar__main");
				tools::_display("Sklep/ustawienia.tpl");
				break;
				
			default:
				$this->toolbar("toolbar__main");
				$this->pokazProduktyPromocyjne(null/*nie bierz pod uwage kategorię*/);
				$this->wyswietlProduktyDlaKategorii();
				break;
		}
		//print_r($this->vars);
	}
	
	

	
	
	/**
	 * instalacja bazy dla 21wSklep
	 * @return obiekt bazy
	 */
	static function installDB(){
		global $parameters;
		$nazwa_bazy__ = str_replace('www.','',$_SERVER['HTTP_HOST']).".db";
		// przygotowanie parametrów do zalozenia bazy
		$parametryBazy= array('drivers'=>array('driver'=>'sqlite'),
							  'sqlite'=>array('host'=>$parameters['sklep']['host'],
											  'database'=>$nazwa_bazy__ ));
		$db = config::getDB($parametryBazy);
		
		$parameters['sqlite']['host'] = $parameters['sklep']['host'];
		$parameters['drivers']['dbinstall'] = $parameters['sklep']['dbinstall'];
		config::_instal_database($parameters['drivers']['driver'],$db);
		
		return $db;
	}
	
	
	/**
	 * Generuje pasek toolbar
	 * @param $tool__
	 * @return unknown_type
	 */
	private function toolbar($tool__){
		global $objSession;
		$tollsIcons = $this->przygotujToolBar($tool__);
		tools::_assign("toolbar_links",$tollsIcons);		
		if ( $objSession->IsLoggedIn() && $objSession->GetUserData("stanowisko") == 'a') 
		tools::_display("Sklep/toolbar.tpl");
	}
	
	private function przygotujToolBar($tool__){
		switch($tool__){
			case'toolbar__main':		
				$toolbar = array(',,ust_sklepu'=>array('nazwa'=>'Ustawienia','ikona'=>'16_ustawienia.png'));
				break;
			case 'toolbar__ustawienia_start':
				$toolbar = array(',,ust_lista_kategorii_sklepu'=>array('nazwa'=>'Lista kategorii','ikona'=>'16_lista_kategorii.png'),
										',,ust_konfiguracja_sklepu'=>array('nazwa'=>'Konfiguracja sklepu','ikona'=>'16_baza_danych.png'));
				break;
			case 'toolbar__ustawienia_categ':
				$toolbar = array(',,ust_nowa_kategoria_sklepu'=>array('nazwa'=>'Dodaj kategorię','ikona'=>'16_dodaj_kategorie.png'));
					if(!is_null($this->skcID)) $toolbar[",,ust_nowa_podkategoria_sklepu,{$this->skcID}"] = array('nazwa'=>'Dodaj podkategorię','ikona'=>'16_dodaj_sub_kateg.png');
					if(!is_null($this->skcID)) $toolbar[",,ust_edytuj_kategorie_sklepu,{$this->skcID}"] = array('nazwa'=>'Edytuj kategorię','ikona'=>'16_edytuj_kateg.png');
					if(!is_null($this->skcID)) $toolbar[",Sklep,usunKategorieSklepu,{$this->skcID}"] = array('nazwa'=>'Usuń kategorię','ikona'=>'16_usun_kategorie.png');
					if(!is_null($this->skcID)) $toolbar[",,nowy_produkt_sklepu,{$this->skcID}"] = array('nazwa'=>'Dodaj nowy produkt','ikona'=>'16_produkt_add.png');
				break;
			case 'toolbar__produkt_main':
		 		$toolbar = array(",,edytuj_tresc_produktu,{$this->skpID}"=>array('nazwa'=>'Edytuj treśc produktu','ikona'=>'16_produkt_edit.png'),
								",Sklep,usunProduktZSklepu,{$this->skcID},{$this->skpID}"=>array('nazwa'=>'Usuń produkt','ikona'=>'16_produkt_delete.png'),
		 						",,wyswietl_informacje_o_produkcie,{$this->skpID}"=>array('nazwa'=>'Podgląd strony produktu','ikona'=>'16_produkt_dalej.png'));
		 		break;
		}
		return $toolbar;
	}
	
	/**
	 * dodanie nowej pozycji w koszyku
	 * @param $produkt
	 * @return unknown_type
	 */
	public function dodajProduktDoKoszykaAction($skpID__){
		global $dispatcher,$config;
		$kateg = $this->pobiezJednaKategorieDla_skpID($skpID__);
		$produ = $this->pobierzJedenProdukt($skpID__);
		$koszy = array(
			"SystemID"=>"Sklep",
			"KategoID"=>$kateg[0]['skcID'],
			"KategoNazwa"=>$kateg[0]['skcNazwa'],
			"ProdukID"=>$produ['skpID'],
			"ProdukNazwa"=>$produ['skpNazwa'],
			"ProdukCena"=>$produ['skpCena'],
			"ProdukIlosc"=>1,
			"ProdukJedn"=>$produ['skpJednMia'],
			"ProdukWaluta"=>$produ['skpWaluta'],
			"ProdukStawka"=>$produ['skpStawVat'],
			"ProdukSymbol"=>$produ['skpSymbol'],
			"ProdukPhoto"=>HTTP_URL."photo,/public/users/".str_replace('www.','',$_SERVER['HTTP_HOST'])."/Sklep/{$produ['skcID']}_{$produ['skpID']}_produkt.jpg,80,80,100.jpg"
		);
		$dispatcher->Koszyk->dodajDoKoszyka($koszy);
		tools::_redirect($config->page.",,wyswietl_zawartosc_koszyka.html",null,0,'php');	
	}

	/**
	 * dodanie nowej pozycji w karcie
	 * @param $produkt
	 * @return unknown_type
	 */
	public function dodajProduktDoKartyAction($skpID__=null){
		global $dispatcher,$config;
		$kateg = $this->pobiezJednaKategorieDla_skpID($skpID__);
		$produ = $this->pobierzJedenProdukt($skpID__);
		$koszy = array(
			"SystemID"=>"Sklep",
			"KategoID"=>$kateg[0]['skcID'],
			"KategoNazwa"=>$kateg[0]['skcNazwa'],
			"ProdukID"=>$produ['skpID'],
			"ProdukNazwa"=>$produ['skpNazwa'],
			"ProdukCena"=>($produ['skpCzyPromocja']) ? $produ['skpCenaPromocyjna']  : $produ['skpCena'],
			"ProdukIlosc"=>1,
			"ProdukJedn"=>$produ['skpJednMia'],
			"ProdukWaluta"=>$produ['skpWaluta'],
			"ProdukStawka"=>$produ['skpStawVat'],
			"ProdukSymbol"=>$produ['skpSymbol'],
			"ProdukPhoto"=>HTTP_URL."photo,/public/users/".str_replace('www.','',$_SERVER['HTTP_HOST'])."/sklep/{$produ['skcID']}_{$produ['skpID']}_produkt.jpg,80,80,100.jpg"
		);
		
		$dispatcher->Koszyk->dodajDoKoszyka($koszy);
		tools::_redirect($config->page.",,wyswietl_produkty_dla_kategorii,{$kateg[0]['skcID']}.html",null,0,'php');	
	}
	
	
	

	/**
	 * Wykoanie formularza Nowa kategoria i przekierowanie na
	 * edycje nowo dodanej kategorii
	 * 
	 * @return unknown_type
	 */
	public function zapiszNowaKategorieSklepuAction(){
		global $objSession;
		if ( !$objSession->IsLoggedIn() && $objSession->GetUserData("stanowisko") != 'a') { tools::_redirect('zaloguj_sie.html'); return;}
		$this->vars[2] = $this->zapiszNowaKategorieDoBazy();
		$this->akcja = "ust_edytuj_kategorie_sklepu";
	}
	
	public function zapiszEdytowanaKategorieSklepuAction(){
		global $objSession,$config;
		if ( !$objSession->IsLoggedIn() && $objSession->GetUserData("stanowisko") != 'a') { tools::_redirect('zaloguj_sie.html'); return;}
		$this->vars[2] = $config->skcID;
		$this->zapiszEdytowanaKategorieDoBazy();
		$this->akcja = "wyswietl_produkty_dla_kategorii";		
	}
	
	public function usunKategorieSklepuAction($skcID=null){
		global $objSession,$config;
		if ( !$objSession->IsLoggedIn() && $objSession->GetUserData("stanowisko") != 'a') { tools::_redirect('zaloguj_sie.html'); return;}
		$this->usunKategorieSklepuZBazy($skcID);
		$this->akcja = "null";		
	}
	
	public function wyswietlKategorieSklepAction(){
		$this->toolbar("toolbar__ustawienia_categ");
		tools::_assign("skcID",$this->skcID);
		$this->wyswietlKategorieSklepu();	
	}
	
	public function zapiszNowyProduktSklepuAction(){
		global $objSession,$config;
		if ( !$objSession->IsLoggedIn() && $objSession->GetUserData("stanowisko") != 'a') { tools::_redirect('zaloguj_sie.html'); return;}
		$this->skcID = $config->skcID;
		$this->zapiszNowyProduktDoBazy();
		$this->zapiszZdjecieProduktuNAaDysk();
		tools::_redirect($config->page.",,wyswietl_informacje_o_produkcie,$this->skpID.html",null,0,'php');	
	}
	
	public function zapiszEdytowanyProduktSklepuAction(){
		global $objSession,$config;
		if ( !$objSession->IsLoggedIn() && $objSession->GetUserData("stanowisko") != 'a') { tools::_redirect('zaloguj_sie.html'); return;}
		$this->skcID = $config->skcID;
		$this->skpID = $config->skpID;
		$this->zapiszEdytowanyProduktDoBazy();
		$this->zapiszZdjecieProduktuNAaDysk();
		tools::_redirect($config->page.",,wyswietl_informacje_o_produkcie,$this->skpID.html",null,0,'php');	
	}
	
	public function usunProduktZSklepuAction($params=null){
		global $objSession;
		if ( !$objSession->IsLoggedIn() && $objSession->GetUserData("stanowisko") != 'a') { tools::_redirect('zaloguj_sie.html'); return;}
		if (!is_null($this->vars) && array_key_exists(2,$this->vars)) $this->skcID = $this->vars[2];
		if (!is_null($this->vars) && array_key_exists(3,$this->vars)) $this->skpID = $this->vars[3];	
		$this->usunProduktSklepuZBazy($this->skcID,$this->skpID);
		$this->akcja = "wyswietl_produkty_dla_kategorii";
	}
	
	public function zapiszUstawieniaSklepuAction(){
		global $config, $objSession;
		if ( !$objSession->IsLoggedIn()  && $objSession->GetUserData("stanowisko") == 'a'){	
			tools::_redirect('zaloguj_sie.html'); return;
		}
	
		$this->zapiszUstawieniaSklepu();
		tools::_redirect($config->page.".html",null,0,'php');
	}
	
	
	/**
	 * odbior i zapis potwierdzenia z dotpay
	 * @param $sess
	 * @return unknown_type
	 */
	public function DotPayUrlcAction($sess="null"){
		global $config;
		// sprawdzenie czy tranzakcja z mojego kontka DotPay
		if ($config->__isset("id") && $config->id == $this->ustawienia['numer_id_dotpay']){
			$this->zapiszPotwierdzenieDoBazy();	
			echo "OK";		
		}else{
			echo "ZŁY NUMER ID";	
		}			
	}
	
	/**
	 * zerowanie wartości koszyka po powrocie z systemu DotPay
	 * @return unknown_type
	 */
	public function wyzerujKoszykAction(){
		global $dispatcher;		
		$dispatcher->Koszyk->wyzerujKoszykAction();
	}
	
	/**
	 * metoda wykonywana z poziomu clasy Koszyk
	 * zapisuje dane znajdujace się w koszyku do bazy gdzie czekaja na potwierdzenie
	 * 
	 * @param $koszyk
	 * @return unknown_type
	 */
	public function zapiszNowaTranzakcje($tranzakacjaID=nyll,$koszyk=nyll){
		if(!is_null($tranzakacjaID))$this->zapiszNowaTranzakcjeDoBazy($tranzakacjaID,$koszyk);
	}
	
	
	
	protected function zapiszZdjecieProduktuNAaDysk(){
		global $parameters;
		foreach ($_FILES as $fieldName => $file) {
			if ($file['size'] <= $parameters['sklep']['maxWielkoscPliku'] && $file['error'] == 0 ) {
				$up=move_uploaded_file($file['tmp_name'],  "{$this->folder}{$this->skcID}_{$this->skpID}_produkt.jpg" );
			}			
		}
	}
	
	protected function wyswietlKategorieSklepu(){
		$categ__ = $this->pobiezDaneKategoriizBazy();
		SklepController::wyswietlListeKategoriiSklepu(0,0,$categ__);	
	}
	
	
	protected function edytujKategorieSklepu(){
		$kategorie = $this->pobiezDaneKategoriizBazy($this->skcID);
		tools::_assign("kateg",$kategorie);
		tools::_display("Sklep/edytuj_kategorie.tpl");
	}

	protected function stronaGlownaUstawien(){

	}
	
	protected function ustawieniaListaKategoriiSklepu(){

	}
	
	protected function ustawieniaZarzadzanieDanymiSklepu(){

	}
	
	
	
	
	//
	//
	// PRODUKTY
	//
	//
	
	protected function pokazProduktyPromocyjne($skcID__=null){
		global $objSession;
		tools::_assign("kateg",array('skcNazwa'=>"Produkty promocyjne"));
		$produkty = $this->pobierzListeProduktowPromocyjnychSklepu($skcID__);
		if(!empty($produkty)){
			tools::_assign("produkty",$produkty);
			tools::_display("Sklep/lista_produktow.tpl");
		}
	}
	
	protected function wyswietlProduktSklepu(){
		tools::_assign("produkt",$this->pobierzJedenProdukt($this->skpID));
		tools::_display("Sklep/wyswietl_produkt.tpl");
	}
	
	protected function wyswietlProduktyDlaKategorii(){
		global $config;
		if(is_null($this->skcID) || empty($this->skcID)){
			$this->skcID = $this->pobiezJednaDomyslnaKategorie();
		}
		tools::_assign("kateg",$this->pobiezDaneKategoriizBazy($this->skcID,$config->__lang));		
		tools::_assign("produkty",$this->pobierzListeProduktowSklepu($this->skcID));
		tools::_display("Sklep/lista_produktow.tpl");
	}
	
	protected function edytujProduktSklepu(){
		tools::_assign("produkt",$this->pobierzJedenProduktDoEdycji());
		tools::_display("Sklep/edytuj_produkt.tpl");		
	}
	
	public static function wyswietlListeKategoriiSklepu($categID,$pcategID,$category,$form="Sklep/lista_kategorii.tpl"){
		if (!is_array($category)) return;
		$i = 0;
		$sub = 'open';
		$czy_jest_nastepny_poziom = false;
		if ($sub){
				foreach ($category as $key1 => $rows) {
					if ( $rows['skcpID'] == $categID ){	
						$czy_jest_nastepny_poziom = true;
						if ($sub == 'open'){ 
							echo "<ul id=\"cat{$rows['skcID']}\" class=\"sidemenu\">";
							$sub = 'close';				
						}
						tools::_assign('categ',$rows);

						echo "<li> ";						
						tools::_display($form);						
						SklepController::wyswietlListeKategoriiSklepu($rows['skcID'],$rows['skcpID'],$category,$form);
						
						echo '</li>';
						$i++;
					}
				}			
			if ($sub == 'close') echo '</ul>';
		}
	}
	
	

}

